10 REM  TANK COMMANDER 
20 REM  BY RICHARD PORTER 
30 RANDOMIZE
40 GOSUB 2550
50 CALL CLEAR
60 GOSUB 2150
70 CALL SCREEN(12)
80 CALL COLOR(9,13,12)
90 CALL COLOR(10,6,12)
100 DIM PPEG(10)
110 DIM CPEG(10)
120 DIM PPOS(4)
130 DIM CPOS(4)
140 PWINS=0
150 CWINS=0
160 REM  SETUP MINEFIELDS 
170 DIM LMINE(8)
180 FOR MINE=1 TO 8
190 READ LMINE(MINE)
200 NEXT MINE
210 REM  SET TANK POSITIONS 
220 FOR TANK=1 TO 4
230 READ PPOS(TANK)
240 READ CPOS(TANK)
250 NEXT TANK
260 REM  INITIALISE PEGS 
270 FOR PEG=1 TO 10
280 PPEG(PEG)=PEG
290 CPEG(PEG)=PEG
300 NEXT PEG
310 REM  SETUP DISPLAY 
320 CALL CLEAR
330 GOSUB 1900
340 REM  DISPLAY FIELD 
350 CALL HCHAR(7,2,60,30)
360 CALL HCHAR(12,2,60,30)
370 REM  DISPLAY TANKS 
380 FOR TANK=1 TO 4
390 CALL HCHAR(7+TANK,PPOS(TANK),96)
400 CALL HCHAR(7+TANK,CPOS(TANK),104)
410 NEXT TANK
420 PLOSS=0
430 CLOSS=0
440 ROUND=0
450 REM  MAIN LOOP 
460 ROUND=ROUND+1
470 TURN=1
480 REM  DISPLAY TURN NUMBER 
490 CALL HCHAR(14,8,48+ROUND)
500 CALL HCHAR(16,8,48+TURN)
510 REM  REFRESH MINEFIELDS 
520 GOSUB 2470
530 REM  COMPUTER CHOOSES 
540 CSHOT=INT(10*RND)+1
550 IF CPEG(CSHOT)=0 THEN 540
560 IF CSHOT>5 THEN 590
570 BIAS=INT(RND*5)
580 IF BIAS<2.5 THEN 540
590 CPEG(CSHOT)=0
600 REM  PLAYER CHOOSES 
610 CALL SOUND(50,366,10)
620 CALL KEY(0,PSHOT,STATUS)
630 IF PSHOT<48 THEN 620
640 IF PSHOT>57 THEN 620
650 PSHOT=PSHOT-48
660 IF PSHOT<>0 THEN 680
670 PSHOT=10
680 IF PPEG(PSHOT)=0 THEN 620
690 PPEG(PSHOT)=0
700 IF CSHOT<>PSHOT THEN 720
710 GOTO 1400
720 IF CSHOT<PSHOT THEN 1070
730 REM  COMPUTER WIN 
740 FOR TANK=1 TO 4
750 IF CPOS(TANK)=0 THEN 860
760 CALL HCHAR(7+TANK,CPOS(TANK),32)
770 CPOS(TANK)=CPOS(TANK)-INT(CSHOT/2)
780 REM  TANK COLLISION 
790 IF CPOS(TANK)<>PPOS(TANK)THEN 830
800 CALL HCHAR(7+TANK,PPOS(TANK),32)
810 GOSUB 2240
820 GOTO 1400
830 IF CPOS(TANK)>4 THEN 850
840 CPOS(TANK)=5
850 CALL HCHAR(7+TANK,CPOS(TANK),104)
860 IF PPOS(TANK)=0 THEN 1050
870 CALL HCHAR(7+TANK,PPOS(TANK),32)
880 PPOS(TANK)=PPOS(TANK)-INT(CSHOT/2)
890 IF PPOS(TANK)>1 THEN 910
900 PPOS(TANK)=2
910 CALL HCHAR(7+TANK,PPOS(TANK),96)
920 IF LMINE(TANK)<>PPOS(TANK)THEN 1050
930 FOR BOOM=2 TO 20 STEP 2
940 CALL SOUND(200,-6,BOOM)
950 COLOUR=INT(RND*16)+1
960 CALL SCREEN(COLOUR)
970 CALL COLOR(9,9,COLOUR)
980 NEXT BOOM
990 CALL COLOR(9,13,12)
1000 CALL SCREEN(12)
1010 CALL HCHAR(7+TANK,PPOS(TANK),32)
1020 PPOS(TANK)=0
1030 PLOSS=PLOSS+1
1040 CALL HCHAR(20,28,48+PLOSS)
1050 NEXT TANK
1060 GOTO 1400
1070 REM  PLAYER WIN 
1080 FOR TANK=1 TO 4
1090 IF PPOS(TANK)=0 THEN 1200
1100 CALL HCHAR(7+TANK,PPOS(TANK),32)
1110 PPOS(TANK)=PPOS(TANK)+INT(PSHOT/2)
1120 REM  TANK COLLISION 
1130 IF CPOS(TANK)<>PPOS(TANK)THEN 1170
1140 CALL HCHAR(7+TANK,CPOS(TANK),32)
1150 GOSUB 2240
1160 GOTO 1400
1170 IF PPOS(TANK)<29 THEN 1190
1180 PPOS(TANK)=28
1190 CALL HCHAR(7+TANK,PPOS(TANK),96)
1200 IF CPOS(TANK)=0 THEN 1390
1210 CALL HCHAR(7+TANK,CPOS(TANK),32)
1220 CPOS(TANK)=CPOS(TANK)+INT(PSHOT/2)
1230 IF CPOS(TANK)<32 THEN 1250
1240 CPOS(TANK)=31
1250 CALL HCHAR(7+TANK,CPOS(TANK),104)
1260 IF LMINE(TANK+4)<>CPOS(TANK)THEN 1390
1270 FOR BOOM=2 TO 20 STEP 2
1280 CALL SOUND(200,-7,BOOM)
1290 COLOUR=INT(RND*16)+1
1300 CALL SCREEN(COLOUR)
1310 CALL COLOR(10,9,COLOUR)
1320 NEXT BOOM
1330 CALL COLOR(10,6,12)
1340 CALL SCREEN(12)
1350 CALL HCHAR(7+TANK,CPOS(TANK),32)
1360 CPOS(TANK)=0
1370 CLOSS=CLOSS+1
1380 CALL HCHAR(20,8,48+CLOSS)
1390 NEXT TANK
1400 TURN=TURN+1
1410 REM  ADJUST SILOS 
1420 CALL HCHAR(23,1+PSHOT,32)
1430 CALL HCHAR(23,21+CSHOT,32)
1440 IF PLOSS<>4 THEN 1650
1450 CALL CLEAR
1460 PRINT "COMPUTER COMMAND WINS."
1470 CWINS=CWINS+1
1480 PRINT
1490 PRINT
1500 PRINT "GAME VICTORIES. . . "
1510 PRINT
1520 PRINT "PLAYER ";PWINS;" COMPUTER ";CWINS
1530 PRINT
1540 IF PWINS=100 THEN 1620
1550 IF CWINS=100 THEN 1620
1560 PRINT "PLAY AGAIN (Y/N) ";
1570 INPUT CHOICE$
1580 IF CHOICE$="N" THEN 1620
1590 IF CHOICE$<>"Y" THEN 1480
1600 RESTORE 2450
1610 GOTO 220
1620 PRINT
1630 PRINT "THANK YOU FOR PLAYING"
1640 STOP
1650 IF CLOSS<>4 THEN 1710
1660 CALL CLEAR
1670 PRINT "PLAYER COMMAND WINS."
1680 PWINS=PWINS+1
1690 GOTO 1480
1700 REM  RELOAD NEW ROUND 
1710 IF TURN<>11 THEN 500
1720 IF ROUND<>10 THEN 1750
1730 PRINT "BATTLE STALEMATE."
1740 GOTO 1480
1750 CALL SCREEN(7)
1760 CALL SOUND(250,-6,10)
1770 FOR PEG=1 TO 10
1780 CPEG(PEG)=PEG
1790 PPEG(PEG)=PEG
1800 CALL HCHAR(16,19+PEG,ASC(SEG$(" RELOAD   ",PEG,1)))
1810 CALL HCHAR(23,1+PEG,97)
1820 CALL HCHAR(23,21+PEG,105)
1830 CALL SOUND(45,-5,10)
1840 NEXT PEG
1850 CALL SOUND(300,-7,0)
1860 CALL HCHAR(16,21,32,6)
1870 CALL SCREEN(12)
1880 GOTO 460
1890 REM  DISPLAY PEG SILOS 
1900 FOR TITLE=1 TO 15
1910 CALL HCHAR(2,8+TITLE,ASC(SEG$("TI TANK COMMAND",TITLE,1)))
1920 NEXT TITLE
1930 FOR PEG=1 TO 10
1940 CALL HCHAR(22,1+PEG,48+PEG)
1950 CALL HCHAR(23,1+PEG,97)
1960 CALL HCHAR(22,21+PEG,48+PEG)
1970 CALL HCHAR(23,21+PEG,105)
1980 NEXT PEG
1990 REM   DISPLAY TURN AND ROUND LABELS 
2000 FOR ROUND=1 TO 5
2010 CALL HCHAR(14,1+ROUND,ASC(SEG$("ROUND",ROUND,1)))
2020 NEXT ROUND
2030 FOR TALLY=1 TO 5
2040 CALL HCHAR(20,1+TALLY,ASC(SEG$("TALLY",TALLY,1)))
2050 CALL HCHAR(20,21+TALLY,ASC(SEG$("TALLY",TALLY,1)))
2060 NEXT TALLY
2070 FOR TURN=1 TO 4
2080 CALL HCHAR(16,1+TURN,ASC(SEG$("TURN",TURN,1)))
2090 NEXT TURN
2100 FOR PLYR=1 TO 6
2110 CALL HCHAR(24,1+PLYR,ASC(SEG$("PLAYER",PLYR,1)))
2120 NEXT PLYR
2130 RETURN
2140 REM  GRAPHICS 
2150 CALL CHAR(96,"0000181F1C7F7F00")
2160 CALL CHAR(104,"000004FC0F7F7F00")
2170 CALL CHAR(58,"002F29292929292F")
2180 CALL CHAR(97,"01020408103070F0")
2190 CALL CHAR(105,"80402010080C0E0F")
2200 CALL CHAR(59,"0000000000005A7E")
2210 CALL CHAR(60,"00000000000055AA")
2220 RETURN
2230 REM  COLLISION  
2240 FOR SOUND=0 TO 30 STEP 3
2250 CALL SOUND(250,-6,SOUND)
2260 CALL SCREEN(INT(RND*16)+1)
2270 NEXT SOUND
2280 FOR LETTER=1 TO 9
2290 CALL HCHAR(16,20+LETTER,ASC(SEG$("COLLISION",LETTER,1)))
2300 NEXT LETTER
2310 FOR LETTER=1 TO 9
2320 CALL HCHAR(16,20+LETTER,32)
2330 NEXT LETTER
2340 PPOS(TANK)=0
2350 CPOS(TANK)=0
2360 PLOSS=PLOSS+1
2370 CLOSS=CLOSS+1
2380 CALL SCREEN(12)
2390 CALL HCHAR(20,8,48+CLOSS)
2400 CALL HCHAR(20,28,48+PLOSS)
2410 RETURN
2420 REM  LANDMINE POSITIONS 
2430 DATA 3,4,3,2,31,30,29,31
2440 REM  TANK STARTING POSITIONS 
2450 DATA 10,24,11,23,10,22,9,23
2460 REM  DISLAY MINEFIELDS 
2470 FOR MINE=1 TO 4
2480 IF PPOS(MINE)=LMINE(MINE)THEN 2500
2490 CALL HCHAR(7+MINE,LMINE(MINE),59)
2500 IF CPOS(MINE)=LMINE(MINE+4)THEN 2520
2510 CALL HCHAR(7+MINE,LMINE(MINE+4),59)
2520 NEXT MINE
2530 RETURN
2540 REM  WELCOME SCREEN 
2550 CALL CLEAR
2560 CALL SCREEN(13)
2570 PRINT "TANK COMMAND"
2580 PRINT
2590 PRINT
2600 PRINT "Tanks are difficult to knockout directly but they are   vulnerable to mines."
2610 PRINT
2620 PRINT "Force the enemy back into   the minefields to eliminate them."
2630 PRINT
2640 PRINT "Choose your weapon strength using the number keys. Use  0 to launch your strongest  weapon."
2650 PRINT
2660 PRINT "WARNING. If tanks collide,  both will be destroyed."
2670 PRINT
2680 PRINT
2690 PRINT
2700 PRINT "PRESS A KEY TO CONTINUE."
2710 PRINT
2720 CALL SOUND(45,-5,0)
2730 FOR WAIT=1 TO 100
2740 NEXT WAIT
2750 CALL SOUND(110,-5,5)
2760 CALL KEY(0,KEY,STATUS)
2770 IF STATUS=0 THEN 2760
2780 RETURN
